import { error, _decorator } from 'cc';
import VMBase from './VMBase';

//todo

// +普通 label 更新数据的情况,label.string = xxx;
// +frameIndex 插件，通过number 数值设置 BhvFrameIndex 来切换当前贴图
// +spriteFrame 直接替换贴图的情况 , 
//  读取本地路径 data.spriteFrame = $res:/pic/com1
//  读取网页路径 data.spriteFrame = $url:http:xxxxxxxxxx.png
// +特殊条件控制 

// 比较条件:,如果传入值 > /< />= /<= /== 某值时，执行的action类型

const {ccclass, property,executeInEditMode,menu,help} = _decorator;

// enum WatchMode {
//     ccLabel,
//     ccRichText,
//     ccSlider,
//     ccProgressBar,
// }

enum FILTER_MODE {
    "none",
    "==", //正常计算，比较 等于
    "!=", //正常计算，比较 不等于
    ">",  //正常计算，比较>
    ">=", //正常计算，比较>=
    "<",  //正常计算，比较<
    "<=", // 正常计算，比较>=
}

/**
 *  [VM-Event]
 * 提供  ViewModel 的相关基础功能,
 * 如果值发生变化将会调用对应的函数方法
 */
@ccclass
@executeInEditMode
@menu('ModelViewer/VM-Face(头像加载)')
@help('https://github.com/wsssheep/cocos_creator_mvvm_tools/blob/master/docs/VMEvent.md')
export default class VMFace extends VMBase {
    @property({
        tooltip:'监听获取值的路径',
    })
    watchPath:string = "";

    @property(Boolean)
    isUrl:boolean = false;

    isVMValue:boolean = true;

    // LIFE-CYCLE CALLBACKS:

    onLoad () {

        this.isVMValue = !this.isUrl;

        if(this.isVMValue)
        super.onLoad();

        this.checkSprite();
    }

    async onValueInit(){
        if(this.isVMValue)
        {
            let faceUrl = this.VM.getValue(this.watchPath);
            if(!faceUrl)return;
            this.updateFace(faceUrl);
        }
        else
        {
            this.updateFace(this.watchPath);
        }
    }
    
    onValueChanged(newVar:any,oldVar:any,pathArr:any[]){
        if(this.isVMValue == false)return;
        if(!newVar)return;
        this.updateFace(newVar);
    }
    async updateFace(faceUrl:string){
        // let face:any = await FaceUnit.getPng(faceUrl);
        // if(this.isValid)
        // this.getComponent(cc.Sprite).spriteFrame = face;
    }

    checkSprite() {
        let checkArray = [
            'cc.Sprite'
        ];
        for (let i = 0; i < checkArray.length; i++) {
            const e = checkArray[i];
            let comp = this.node.getComponent(e);
            if (comp) {
                return true;
            }
        }
        error('没有挂载任何Sprite组件');
        return false;
    }

    // update (dt) {}
}

